
<!DOCTYPE html>
<!--[if lt IE 7]>
<html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>
<html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>
<html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js"> <!--<![endif]-->
<head>
    <meta charset="UTF-8">
    <title> 第一章：介紹Django - [ The Django Book 2.0中文版 ] - 看云</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <link rel="shortcut icon" href="/favicon.ico">
    <meta name="description" content="本书的目的是将你培养成Django专家。 主要侧重于两方面： 第一，我们深度解释 Django 到底做了哪些工作以及如何用她构建Web应用；第二，我们将会在适当的地方讨论更高级的概念" />
    <meta name="keywords" content="Django" />
    <link rel="stylesheet" href="http://static.kancloud.cn/Static/home/font/style.css?v=20161121002">
    <link rel="stylesheet" href="http://static.kancloud.cn/Static/document/dist/kancloud.min.css?v=20161121002">
            <script>(function (H) {
        H.className = H.className.replace(/\bno-js\b/, 'js')
    })(document.documentElement)</script>
    <style></style>
</head>
<body>
<!--[if lte IE 8]>
<div class="m-browsehappy">
    <div class="browsehappy-inner">
        <h3 class="title">对不起！<br>您的浏览器版本太低，请升级你的浏览器</h3>

        <p class="suggest">建议使用：</p>

        <p class="brower">
            <span class="item">
                <a class="ie image" href="https://www.microsoft.com/en-us/download/internet-explorer.aspx" target="_blank" title="下载Internet Explorer浏览器"></a>
                <b class="text">ie9+</b>
            </span>
            <span class="item">
                <a class="chrome image" href="http://www.google.cn/intl/zh-CN/chrome/browser/?spm=1.7274553.0.0.benzR1" target="_blank" title="下载Chrome浏览器"></a>
                <b class="text">chrome</b>
            </span>
        </p>

        <p class="from">来自看云官方</p>
        <b class="browsehappy-arrow"></b>
    </div>
</div>
<script>
    window.nonsupportIE = true;
</script>
<![endif]-->
<div class="m-manual manual-reader" data-namespace="thinkphp" data-name="django-book" data-id="2253" data-token="bf2c5515b715002d666fd18332309af2" data-title="The Django Book 2.0中文版" data-desc="本书的目的是将你培养成Django专家。 主要侧重于两方面： 第一，我们深度解释 Django 到底做了哪些工作以及如何用她构建Web应用；第二，我们将会在适当的地方讨论更高级的概念" data-basepath="http://www.kancloud.cn" data-article-id="39581">
    <div class="manual-head">
        <div class="left">
            <a class="manual-title" href="http://www.kancloud.cn/thinkphp/django-book" title="返回文档首页">
                <b class="text">The Django Book 2.0中文版</b>
            </a>
        </div>
        <div style="display: none;">
            <img src="http://box.kancloud.cn/2015-06-23_55896703c0fe4_173x231.jpg?imageMogr2/thumbnail/300x400!/interlace/1/quality/100" />
        </div>
    </div>
    <div class="manual-body">
        <div class="manual-left">
            <div class="manual-tab">
                <div class="tab-navg">
                    <span data-mode="view" class="navg-item active"><i class="icon icon-menu"></i><b class="text">目录</b></span>
                    <span data-mode="search" class="navg-item"><i class="icon icon-search"></i><b class="text">搜索</b></span>
                </div>
                <div class="tab-util">
                    <span class="manual-fullscreen-switch">
                        <b class="open icon-chevron-right" title="展开"></b>
                        <b class="close icon-chevron-left" title="关闭"></b>
                    </span>
                </div>
                <div class="tab-wrap">
                    <div class="tab-item manual-catalog">
                        <div class="catalog-list read-book-preview">
                            <a href="/thinkphp/django-book/39581" data-pid="0" data-disable="0" data-id="39581">第一章：介紹Django</a><a href="/thinkphp/django-book/39582" data-pid="0" data-disable="0" data-id="39582">第二章：入门</a><a href="/thinkphp/django-book/39583" data-pid="0" data-disable="0" data-id="39583">第三章：视图和URL配置</a><a href="/thinkphp/django-book/39584" data-pid="0" data-disable="0" data-id="39584">第四章：模版</a><a href="/thinkphp/django-book/39585" data-pid="0" data-disable="0" data-id="39585">第五章：模型</a><a href="/thinkphp/django-book/39586" data-pid="0" data-disable="0" data-id="39586">第六章：Admin</a><a href="/thinkphp/django-book/39587" data-pid="0" data-disable="0" data-id="39587">第七章：表单</a><a href="/thinkphp/django-book/39588" data-pid="0" data-disable="0" data-id="39588">第八章：高级视图和URL配置</a><a href="/thinkphp/django-book/39589" data-pid="0" data-disable="0" data-id="39589">第九章：模版高级进阶</a><a href="/thinkphp/django-book/39590" data-pid="0" data-disable="0" data-id="39590">第十章：模型高级进阶</a><a href="/thinkphp/django-book/39591" data-pid="0" data-disable="0" data-id="39591">第十一章：通用视图</a><a href="/thinkphp/django-book/39592" data-pid="0" data-disable="0" data-id="39592">第十二章：部署Django</a><a href="/thinkphp/django-book/39593" data-pid="0" data-disable="0" data-id="39593">第十三章：输出非HTML内容</a><a href="/thinkphp/django-book/39594" data-pid="0" data-disable="0" data-id="39594">第十四章：会话、用户和注册</a><a href="/thinkphp/django-book/39595" data-pid="0" data-disable="0" data-id="39595">第十五章：缓存机制</a><a href="/thinkphp/django-book/39596" data-pid="0" data-disable="0" data-id="39596">第十六章：集成的子框架</a><a href="/thinkphp/django-book/39597" data-pid="0" data-disable="0" data-id="39597">第十七章：中间件</a><a href="/thinkphp/django-book/39598" data-pid="0" data-disable="0" data-id="39598">第十八章：集成已有的数据库和应用</a><a href="/thinkphp/django-book/39599" data-pid="0" data-disable="0" data-id="39599">第十九章：国际化</a><a href="/thinkphp/django-book/39600" data-pid="0" data-disable="0" data-id="39600">第二十章：安全</a>                        </div>
                    </div>
                    <div class="tab-item manual-search">
                        <div class="search-inner">
                            <div class="search-form">
                                <form class="w-search" onsubmit="return false;" method="post" autocomplete="off">
                                    <label class="w-text text-m text-full search-enter"><input class="text-input" type="text" name="keyword" placeholder="请输入搜索关键词..."></label>
                                    <input type="hidden" name="book_id" value="2253">
                                    <button class="search-btn icon-search" type="submit"></button>
                                </form>
                            </div>
                            <div class="search-result"></div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="m-copyright">
                <p>
                                        本文档使用
                    <a href="http://www.kancloud.cn" target="_blank" onclick="window.open('http://www.kancloud.cn')">看云</a> 发布
                </p>
            </div>
        </div>
        <div class="manual-right">
            <div class="m-article">
                <div class="article-head">
                    <div class="head-tool">
                        <div class="item font-setting w-drop drop-hover">
                            <span class="drop-show"><i class="icon icon-font"></i><b class="text">文字</b></span>
                            <div class="drop-hide drop-hide-left">
                                <b class="drop-arrow-outer"><i class="drop-arrow-inner"></i></b>

                                <div class="drop-hide-inner">
                                    <div class="buttons size-list">
                                        <button type="button" id="reduce-font-size" class="button size-2">A</button>
                                        <button type="button" id="enlarge-font-size" class="button size-2">A</button>
                                    </div>
                                    <div class="buttons theme-list">
                                        <button type="button" id="color-theme-preview-0" class="button size-3" data-theme="0">默认</button>
                                        <button type="button" id="color-theme-preview-1" class="button size-3" data-theme="1">护眼</button>
                                        <button type="button" id="color-theme-preview-2" class="button size-3" data-theme="2">夜间</button>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="head-util">

                    </div>
                    <h1></h1>
                </div>
                <div class="article-wrap">
                    <div class="article-view">
                        <div class="view-body think-editor-content">
                            <p>本书所讲的是Django：一个可以使Web开发工作愉快并且高效的Web开发框架。 使用Django，使你能够以最小的代价构建和维护高质量的Web应用。</p>
<p>从好的方面来看，Web 开发激动人心且富于创造性；从另一面来看，它却是份繁琐而令人生厌的工作。 通过减少重复的代码，Django 使你能够专注于 Web 应用上有 趣的关键性的东西。 为了达到这个目标，Django 提供了通用Web开发模式的高度抽象，提供了频繁进行的编程作业的快速解决方法，以及为“如何解决问题”提供了清晰明了的约定。 同时，Django 尝试留下一些方法，来让你根据需要在framework之外来开发。</p>
<p>本书的目的是将你培养成Django专家。 主要侧重于两方面： 第一，我们深度解释 Django 到底做了哪些工作以及如何用她构建Web应用；第二，我们将会在适当的地方讨论更高级的概念，并解释如何 在自己的项目中高效的使用这些工具。 通过阅读此书，你将学会快速开发功能强大网站的技巧，并且你的代码将会十分 清晰，易于维护。 本书的代码清晰，易维护，通过学习，可以快速开发功能强大的网站。</p>
<h2>框架是什麼?</h2>
<p>Django 在新一代的 <em>Web框架</em> 中非常出色，为什么这么说呢？</p>
<p>为回答该问题，让我们考虑一下_不使用_框架设计 Python 网页应用程序的情形。 贯穿整本书，我们多次展示不使用框架实现网站基本功能的方法，让读者认识到框架开发的方便。 （不使用框架，更多情况是没有合适的框架可用。 最重要的是，理解实现的来龙去脉会使你成为一个优秀的web开发者。）</p>
<p>使用Python开发Web，最简单，原始和直接的办法是使用CGI标准，在1998年这种方式很流行。 现在从应用角度解释它是如何工作： 首先做一个Python脚本，输出HTML代码，然后保存成.cgi扩展名的文件，通过浏览器访问此文件。 就是这样。</p>
<p>如下示例，用Python CGI脚本显示数据库中最新出版的10本书： 不用关心语法细节；仅仅感觉一下基本实现的方法：</p>
<pre><code>#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html\n"
print "&lt;html&gt;&lt;head&gt;&lt;title&gt;Books&lt;/title&gt;&lt;/head&gt;"
print "&lt;body&gt;"
print "&lt;h1&gt;Books&lt;/h1&gt;"
print "&lt;ul&gt;"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

for row in cursor.fetchall():
    print "&lt;li&gt;%s&lt;/li&gt;" % row[0]

print "&lt;/ul&gt;"
print "&lt;/body&gt;&lt;/html&gt;"

connection.close()</code></pre>
<p>首先，用户请求CGI，脚本代码打印Content-Type行，后面跟着换行。 再接下 来是一些HTML的起始标签，然后连接数据库并执行一些查询操作，获取最新的十本书。 在遍历这些书的同时，生成一个书名的HTML列表项。 最后，输出HTML的结束标签并且关闭数据库连接。</p>
<p>像这样的一次性的动态页面，从头写起的方法并非一定不好。 其中一点： 这些代码简单易懂，就算是一个初起步的 开发者都能读明白这16行的Python的代码，而且这些代码从头到尾做了什么都能了解得一清二楚。 不需要学习额外 的背景知识，没有额外的代码需要去了解。 同样，也易于部署这16行代码，只需要将它保存为一个latestbooks.cgi 的 文件，上传到网络服务器上，通过浏览器访问即可。</p>
<p>尽管实现很简单，还是暴露了一些问题和不便的地方。 问你自己这几个问题：</p>
<ul><li>应用中有多处需要连接数据库会怎样呢？ 每个独立的CGI脚本，不应该重复写数据库连接的代码。 比较实用的办法是写一个共享函数，可被多个代码调用。</li>
<li>一个开发人员 <em>确实</em> 需要去关注如何输出Content-Type以及完成所有操作后去关闭数据 库么？ 此类问题只会降低开发人员的工作效率，增加犯错误的几率。 那些初始化和释放 相关的工作应该交给一些通用的框架来完成。</li>
<li>如果这样的代码被重用到一个复合的环境中会发生什么？ 每个页面都分别对应独立的数据库和密码吗？</li>
<li>如果一个Web设计师，完全没有Python开发经验，但是又需要重新设计页面的话，又将 发生什么呢？ 一个字符写错了，可能导致整个应用崩溃。 理想的情况是，页面显示的逻辑与从数据库中读取书本记录分隔开，这样 Web设计师的重新设计不会影响到之前的业务逻辑。</li>
</ul><p>以上正是Web框架致力于解决的问题。 Web框架为应用程序提供了一套程序框架， 这样你可以专注于编写清晰、易维护的代码，而无需从头做起。 简单来说，这就是Django所能做的。</p>
<h2>MVC 设计模式</h2>
<p>让我们来研究一个简单的例子，通过该实例，你可以分辨出，通过Web框架来实现的功能与之前的方式有何不同。 下面就是通过使用Django来完成以上功能的例子： 首先，我们分成4个Python的文件，(models.py ,views.py , urls.py ) 和html模板文件 (latest_books.html )</p>
<pre><code># models.py (the database tables)

from django.db import models

class Book(models.Model):
    name = models.CharField(max_length=50)
    pub_date = models.DateField()

# views.py (the business logic)

from django.shortcuts import render_to_response
from models import Book

def latest_books(request):
    book_list = Book.objects.order_by('-pub_date')[:10]
    return render_to_response('latest_books.html', {'book_list': book_list})

# urls.py (the URL configuration)

from django.conf.urls.defaults import *
import views

urlpatterns = patterns('',
    (r'^latest/$', views.latest_books),
)

# latest_books.html (the template)

&lt;html&gt;&lt;head&gt;&lt;title&gt;Books&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Books&lt;/h1&gt;
&lt;ul&gt;
{% for book in book_list %}
&lt;li&gt;{{ book.name }}&lt;/li&gt;
{% endfor %}
&lt;/ul&gt;
&lt;/body&gt;&lt;/html&gt;</code></pre>
<p>然后，不用关心语法细节；只要用心感觉整体的设计。 这里只关注分割后的几个文件：</p>
<ul><li>models.py 文件主要用一个 Python 类来描述数据表。 称为 <em>模型(model)</em> 。 运用这个类，你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。</li>
<li>views.py文件包含了页面的业务逻辑。 latest_books()函数叫做<em>视图</em>。</li>
<li>urls.py 指出了什么样的 URL 调用什么的视图。 在这个例子中 /latest/ URL 将会调用 latest_books()这个函数。 换句话说，如果你的域名是example.com，任何人浏览网址<a href="http://example.com/latest/"></a><a href="http://example.com/latest/">http://example.com/latest/</a>将会调用latest_books()这个函数。</li>
<li>latest_books.html 是 html 模板，它描述了这个页面的设计是如何的。 使用带基本逻辑声明的模板语言，如<code>{% for book in book_list %}</code></li>
</ul><p>结合起来，这些部分松散遵循的模式称为模型-视图-控制器(MVC)。 简单的说， MVC 是一种软件开发的方法，它把代码的定义和数据访问的方法（模型）与请求逻辑 （控制器）还有用户接口（视图）分开来。 我们将在第5章更深入地讨论MVC。</p>
<p>这种设计模式关键的优势在于各种组件都是 <em>松散结合</em> 的。这样，每个由 Django驱动 的Web应用都有着明确的目的，并且可独立更改而不影响到其它的部分。 比如，开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。 设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。 数据库管理员可以重新命名数据表并且只需更改一个地方，无需从一大堆文件中进行查找和替换。</p>
<p>本书中，每个组件都有它自己的一个章节。 比如，第三章涵盖了视图，第四章是模板， 而第五章是模型。</p>
<h2>Django 历史</h2>
<p>在我们讨论代码之前我们需要先了解一下 Django 的历史。 从上面我们注意到：我们将向你展示如何不使用捷径来完成工作，以便能更好的理解捷径的原理 同样，理解Django产生的背景，历史有助于理解Django的实现方式。</p>
<p>如果你曾编写过网络应用程序。 那么你很有可能熟悉之前我们的 CGI 例子。</p>
<ol><li>
<p>从头开始编写网络应用程序。</p>
</li>
<li>
<p>从头编写另一个网络应用程序。</p>
</li>
<li>
<p>从第一步中总结（找出其中通用的代码），并运用在第二步中。</p>
</li>
<li>
<p>重构代码使得能在第 2 个程序中使用第 1 个程序中的通用代码。</p>
</li>
<li>
<p>重复 2-4 步骤若干次。</p>
</li>
<li>意识到你发明了一个框架。</li>
</ol><p>这正是为什么 Django 建立的原因！</p>
<p>Django 是从真实世界的应用中成长起来的，它是由 堪萨斯（Kansas）州 Lawrence 城中的一个 网络开发小组编写的。 它诞生于 2003 年秋天，那时 <em>Lawrence Journal-World</em> 报纸的 程序员 Adrian Holovaty 和 Simon Willison 开始用 Python 来编写程序。</p>
<p>当时他们的 World Online 小组制作并维护当地的几个新闻站点, 并在以新闻界特有的快节奏开发环境中逐渐发展。 这些站点包括有 LJWorld.com、Lawrence.com 和 KUsports.com， 记者（或管理层） 要求增加的特征或整个程序都能在计划时间内快速的被建立，这些时间通常只有几天 或几个小时。 因此，Adrian 和 Simon 开发了一种节省时间的网络程序开发框架， 这是在截止时间前能完成程序的唯一途径。</p>
<p>2005 年的夏天，当这个框架开发完成时，它已经用来制作了很多个 World Online 的站点。 当时 World Online 小组中的 Jacob Kaplan-Moss 决定把这个框架发布为一个开源软件。</p>
<p>从今往后数年，Django是一个有着数以万计的用户和贡献者，在世界广泛传播的完善开源项目。 原来的World Online的两个开发者（Adrian and Jacob）仍然掌握着Django，但是其发展方向受社区团队的影响更大。</p>
<p>这些历史都是相关联的，因为她们帮助解释了很重要的两点。 </p>
<p>第一，Django最可爱的地方。 Django诞生于新闻网站的环境中，因此它提供很多了特性（如第6章会说到的管理后台），非常适合内容类的网站，如Amazon.com, craigslist.org和washingtonpost.com，这些网站提供动态的，数据库驱动的信息。 （不要看到这就感到沮丧，尽管Django擅长于动态内容管理系统， 但并不表示Django主要的目的就是用来创建动态内容的网站。 某些方面 <em> 特别高效</em> 与其他方面 <em> 不高效</em> 是有区别的, Django在其他方面也同样高效。）</p>
<p>第二，Django的起源造就了它的开源社区的文化。 因为Django来自于真实世界中的代码，而不是 来自于一个科研项目或者商业产品，她主要集中力量来解决Web开发中遇到的问题，同样 也是Django的开发者经常遇到的问题。 这样，Django每天在现有的基础上进步。 框架的开发者对于让开发人员节省时间，编写更加容易维护的程序，同时保证程序运行的效率具有极大的兴趣。 无他，开发者动力来源于自己的目标：节省时间，快乐工作。 （坦率地讲，他们使用了自己公司的产品。）</p>
<h2>如何阅读本书</h2>
<p>在编写本书时，我们努力尝试在可读性和参考性间做一个平衡，当然本书会偏向于可 读性。 本书的目标，之前也提过，是要将你培养成一名Django专家，我们相信，最好 的方式就是提供文章和充足的实例，而不是一堆详尽却乏味的关于Django特色的手册。 （曾经有人说过，如果仅仅教字母表是无法教会别人说话的。</p>
<p>按照这种思路，我们推荐按顺序阅读第 1-12 章。 这些章节构成了如何使用 Django 的基础；读过之后，你就可以搭建由 Django 支撑的网站了。 1-7章是核心课程，8-11章讲述Django的高级应用，12章讲述部署相关的知识。 剩下的13-20章，讲述Django特有的特点，可以任意顺序阅读。</p>
<p>附录部分用作参考资料。 要回忆语法或查阅 Django 某部分的功能概要时，你偶尔可能会回来翻翻这些资料以及 <a href="http://www.djangoproject.com/"></a><a href="http://www.djangoproject.com/">http://www.djangoproject.com/</a> 上的免费文档。</p>
<h3>所需编程知识</h3>
<p>本书读者需要理解基本的面向过程和面向对象编程： 流程控制（ if ， while 和 for ），数据结构（列表，哈希表/字典），变量，类和对象。</p>
<p>Web开发经验，正如你所想的，也是非常有帮助的，但是对于阅读本书，并不是必须的。 通过本书，我们尽量给缺乏经验的开发人员提供在Web开发中最好的实践。</p>
<h3>Python所需知识</h3>
<p>本质上来说， Django 只不过是用 Python 编写的一组类库。 用 Django 开发站点就是使用这些类库编写 Python 代码。 因此，学习 Django 的关键就是学习如何进行 Python 编程并理解 Django 类库的运作方式。</p>
<p>如果你有Python开发经验，在学习过程中应该不会有任何问题。 基本上,Django的代码并 没有使用一些黑色魔法（例如代码中的花哨技巧，某个实现解释或者理解起来十分困难）。 对你来说，学习Django就是学习她的命名规则和API。</p>
<p>如果你没有使用 Python 编程的经验，你一定会学到很多东西。 它是非常易学易用的。 虽然这本书没有包括一个完整的 Python 教程， 但也算是一个恰当的介绍了 Python特征和 功能的集锦。 当然，我们推荐你读一下官方的 Python 教程，它可 以从 <a href="http://docs.python.org/tut/"></a><a href="http://docs.python.org/tut/">http://docs.python.org/tut/</a> 在线获得。 另外我们也推荐 Mark Pilgrims的 书<em>Dive Into Python</em> （ <a href="http://www.diveintopython.org/"></a><a href="http://www.diveintopython.org/">http://www.diveintopython.org/</a> ）</p>
<h3>Django版本支持</h3>
<p>此书内容对Django 1.1兼容。</p>
<p>Django的开发者保证主要版本号向后兼容。 这意味着，你用Django 1.1写的应用，可以用于1.2，1.3，1.9等所有以1开头的版本</p>
<p>如果Django到了2.0，你的应用可能不再兼容，需要重写，但是，2.0是很遥远的事情。 对此，可以参考一下1.0的开发周期，整整3年的时间。 （这与Python语言的兼容策略非常像： 在python 2.0下写的代码可以在python 2.6下运行，但不一定能在python3.0下运行</p>
<p>所以，此书覆盖1.1版本，可以使用很长时间。</p>
<h3>获取帮助</h3>
<p>Django的最大的益处是,有一群乐于助人的人在Django社区上。 你可以毫无约束的提各种 问题在上面,如:django的安装,app 设计,db 设计,发布。</p>
<ul><li>
<p>Django邮件列表是很多Django用户提出问题、回答问题的地方。 可以通过<a href="http://www.djangoproject.com/r/django-users"></a><a href="http://www.djangoproject.com/r/django-users">http://www.djangoproject.com/r/django-users</a> 来免费注册。</p>
</li>
<li>如果Django用户遇到棘手的问题,希望得到及时地回复，可以使用Django IRC channel。 在Freenode IRC network加入#django</li>
</ul>                        </div>
                        <div class="view-foot">
                            <div class="article-jump">
                                <span class="jump-up">上一篇：<a></a></span>
                                <span class="jump-down">下一篇：<a></a></span>
                            </div>
                            <a class="view-backtop"><i class="icon-arrow-up2"></i></a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="think-loading loading-gear loading-active">
    <span class="loading-inner">
        <i class="loading-image">&nbsp;</i>
        <b class="loading-text">页面正在加载中</b>
    </span>
</div>

<!--
<script src="http://static.kancloud.cn/Static/component/seajs/dist/sea.js"></script>
<script>
    seajs.config({
        base   : "http://static.kancloud.cn/Static/",
        paths  : {
            'home'     : 'home/script',
            'common'   : 'common/script',
            'document' : 'document/script',
            'component': 'component'
        },
        preload : [
            'jquery'
        ],
        alias: {
            'jquery':'component/jquery',
            'config': 'common/module/config'
        },
        map    : [
            [/^(.*\.(?:css|js))(.*)$/i, '$1?v=20161121002']
        ],
        debug  : true
    });
</script>
<script src="http://static.kancloud.cn/Static/home/dist/app.min.js?v=20161121002"></script>
    <script src="http://static.kancloud.cn/Static/document/dist/kancloud.min.js?v=20161121002"></script><script>
    seajs.use('config', function (config) {
        //设置项目配置
        config.set({
            "ROOT"  : "", //当前网站地址
            "APP"   : "", //当前项目地址
            "STATIC": "http://static.kancloud.cn/Static", //静态资源文件地址
            "PUBLIC": "http://static.kancloud.cn/Static", //home目录地址
            "GIT_HOST" : "https://git.kancloud.cn",
        });
        seajs.use('home/globle', function (globle) {
            //启动页面脚本
            if(globle!==false) {
                seajs.use('document/kancloud', function (kancloud) {
                    kancloud.start({"plugins":["highlight"],"comment":true,"collect":true,"cover":"http:\/\/box.kancloud.cn\/2015-06-23_55896703c0fe4_173x231.jpg?imageMogr2\/thumbnail\/231x273!\/interlace\/1\/quality\/100","sharing":true,"login":true});
                });
            }
        });
    });
</script>-->

</body>
</html>